import logging
import unittest
import requests
from parameterized import parameterized

import utils
from api.open_account_api import OpenAccountApi
from api.reg_login_api import RegLoginApi


class TestOpenAccount(unittest.TestCase):
    def setUp(self) -> None:
        #创建session对象
        self.session= requests.session()
        # 调用登录接口，完成用户登录
        self.reg_login_api = RegLoginApi(self.session)
        self.reg_login_api.user_login("13148939905", "123456")
        #实例化开户类
        self.open_account_api = OpenAccountApi(self.session)


    def tearDown(self) -> None:
        #关闭session对象
        self.session.close()


    # 实名认证测试用例
    @parameterized.expand(utils.read_json("open_account_data","realname" ))
    def test01_realname(self,realname,card_id,exp_status_code,exp_status,exp_description):
        #调用封装的方法实现接口请求,获取响应数据
        #调用实例化封装接口的类
        res = self.open_account_api.realname(realname,card_id)
        logging.info("获取实名认证接口响应体数据:{}".format(res.json()))
        #获取响应体数据
        res_dict = res.json()
        #基础断言
        utils.common_assert(self,res,exp_status_code,exp_status,exp_description)
        #实名认证信息断言
        self.assertEqual("150****497",res_dict.get("data").get("card_id"))
        self.assertIn("张",res_dict.get("data").get("realname"))


    # 开户测试用例
    def test02_open_account(self):
        res = self.open_account_api.open_account()
        res_dict = res.json()
        logging.info("获取开户接口响应体数据:{}".format(res_dict))
        #断言
        utils.common_assert(self,res,200,200,"form")



    # 第三方开户测试用例
    def test03_third_open_account(self):
        #开户成功
        res_open_account=self.open_account_api.open_account()
        #获取第三方接口请求数据
        url = utils.html_util(res_open_account)[0]
        logging.info("第三方开户接口url:{}".format(url))
        data_dict= utils.html_util(res_open_account)[1]
        logging.info("第三方开户接口url:{}".format(data_dict))

        #第三方开户成功
        res3_open_account = self.open_account_api.third_open_account(url,data_dict)
        logging.info("第三方开户返回的响应数据:{}".format(res3_open_account.text))

        #断言
        self.assertIn("OK",res3_open_account.text)


